<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>软件工程实践复习 | Gip</title>
    <meta name="generator" content="VuePress 1.7.1">
    <link rel="icon" href="/blog/favicon.ico">
    <meta name="description" content="VuePress搭建">
    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
    
    <link rel="preload" href="/blog/assets/css/0.styles.41872836.css" as="style"><link rel="preload" href="/blog/assets/js/app.ce46b86f.js" as="script"><link rel="preload" href="/blog/assets/js/2.262e1e49.js" as="script"><link rel="preload" href="/blog/assets/js/12.61fc7a48.js" as="script"><link rel="prefetch" href="/blog/assets/js/10.8f2ab6cd.js"><link rel="prefetch" href="/blog/assets/js/11.0e5fc533.js"><link rel="prefetch" href="/blog/assets/js/13.09133bea.js"><link rel="prefetch" href="/blog/assets/js/14.310e3a44.js"><link rel="prefetch" href="/blog/assets/js/15.d17fc55a.js"><link rel="prefetch" href="/blog/assets/js/16.4550e420.js"><link rel="prefetch" href="/blog/assets/js/17.ceff577e.js"><link rel="prefetch" href="/blog/assets/js/18.b6b9ff56.js"><link rel="prefetch" href="/blog/assets/js/3.115df618.js"><link rel="prefetch" href="/blog/assets/js/4.5b96068b.js"><link rel="prefetch" href="/blog/assets/js/5.7e3d77e5.js"><link rel="prefetch" href="/blog/assets/js/6.0175cad5.js"><link rel="prefetch" href="/blog/assets/js/7.861de91f.js"><link rel="prefetch" href="/blog/assets/js/8.db580af8.js"><link rel="prefetch" href="/blog/assets/js/9.60e428ab.js">
    <link rel="stylesheet" href="/blog/assets/css/0.styles.41872836.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/blog/" class="home-link router-link-active"><img src="/blog/logo.jpg" alt="Gip" class="logo"> <span class="site-name can-hide">Gip</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/blog/" class="nav-link">
  Home
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Contact" class="dropdown-title"><span class="title">Contact</span> <span class="arrow down"></span></button> <button type="button" aria-label="Contact" class="mobile-dropdown-title"><span class="title">Contact</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="https://github.com/Gip886" target="_blank" rel="noopener noreferrer" class="nav-link external">
  GitHub
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/blog/" class="nav-link">
  Home
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Contact" class="dropdown-title"><span class="title">Contact</span> <span class="arrow down"></span></button> <button type="button" aria-label="Contact" class="mobile-dropdown-title"><span class="title">Contact</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="https://github.com/Gip886" target="_blank" rel="noopener noreferrer" class="nav-link external">
  GitHub
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></li></ul></div></div> <!----></nav>  <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>vue教程</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Web教程</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/blog/views/web/v2.html" class="sidebar-link">本文主要内容</a></li><li><a href="/blog/views/web/v3.html" class="sidebar-link">Web 存储</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>JSP教程</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>软件工程实践</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/blog/views/software/01.html" aria-current="page" class="active sidebar-link">软件工程实践复习</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第一章软件工程基础" class="sidebar-link">第一章软件工程基础</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-软件的定义p4" class="sidebar-link">1. 软件的定义p4</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-软件工程三要素p8" class="sidebar-link">2. 软件工程三要素p8</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-软件危机产生的原因以及解决措施" class="sidebar-link">3. 软件危机产生的原因以及解决措施</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-软件工程的概念" class="sidebar-link">4. 软件工程的概念</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-软件工程的4个发展阶段" class="sidebar-link">5. 软件工程的4个发展阶段</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_6-软件工程的知识体系" class="sidebar-link">6. 软件工程的知识体系</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_7-软件工程三要素" class="sidebar-link">7. 软件工程三要素</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_8-软件生命周期的概念以及分为几个阶段-并各阶段的任务" class="sidebar-link">8. 软件生命周期的概念以及分为几个阶段，并各阶段的任务</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_9-传统的软件生命周期模型及各自特点-瀑布、原型和螺旋" class="sidebar-link">9. 传统的软件生命周期模型及各自特点（瀑布、原型和螺旋）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_10-面向对象的生命周期模型有哪些-rup-初始、细化、构造、交互-构件复用-及各自特点" class="sidebar-link">10. 面向对象的生命周期模型有哪些（RUP(初始、细化、构造、交互)，构件复用）及各自特点</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_11-敏捷软件开发过程模型的价值观" class="sidebar-link">11. 敏捷软件开发过程模型的价值观</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第二章可行性分析" class="sidebar-link">第二章可行性分析</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-可行性分析的概念" class="sidebar-link">1. 可行性分析的概念</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-可行性分析的三个重要方面" class="sidebar-link">2. 可行性分析的三个重要方面</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-成本效益分析" class="sidebar-link">3. 成本效益分析</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-系统流程图的意义及其绘制" class="sidebar-link">4. 系统流程图的意义及其绘制</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-会撰写可行性分析报告" class="sidebar-link">5. 会撰写可行性分析报告</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结-2" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第三章结构化需求分析" class="sidebar-link">第三章结构化需求分析</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-需求分析的概念和任务" class="sidebar-link">1. 需求分析的概念和任务</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-软件需求包含哪些类别" class="sidebar-link">2. 软件需求包含哪些类别</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-结构化分析的概念、指导思想和基本原则" class="sidebar-link">3. 结构化分析的概念、指导思想和基本原则</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-结构化分析常用的工具有哪些-各有什么作用和特点" class="sidebar-link">4. 结构化分析常用的工具有哪些？各有什么作用和特点</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-结构化分析建模" class="sidebar-link">5. 结构化分析建模</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结-3" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第四章系统设计" class="sidebar-link">第四章系统设计</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-软件设计的2个阶段" class="sidebar-link">1. 软件设计的2个阶段</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-总体设计阶段的主要任务是什么" class="sidebar-link">2. 总体设计阶段的主要任务是什么</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-常见的体系结构风格" class="sidebar-link">3. 常见的体系结构风格</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-模块化、信息隐蔽、分解、耦合、内聚" class="sidebar-link">4. 模块化、信息隐蔽、分解、耦合、内聚</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-数据流的分类" class="sidebar-link">5. 数据流的分类</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_6-结构化设计建模工具" class="sidebar-link">6. 结构化设计建模工具</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_7-详细设计过程的任务是什么" class="sidebar-link">7. 详细设计过程的任务是什么</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_8-数据设计-数据结构、文件、数据库设计" class="sidebar-link">8. 数据设计（数据结构、文件、数据库设计）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_9-详细设计三大类工具-图形、表格和语言-程序流程图、pad图、盒图、过程设计语言、判定表和判定树" class="sidebar-link">9. 详细设计三大类工具（图形、表格和语言）（程序流程图、PAD图、盒图、过程设计语言、判定表和判定树）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_10-结构化软件设计说明书" class="sidebar-link">10. 结构化软件设计说明书</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结-4" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第五章面向对象开发方法" class="sidebar-link">第五章面向对象开发方法</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-对象及其三要素" class="sidebar-link">1. 对象及其三要素</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-面向对象的定义" class="sidebar-link">2. 面向对象的定义</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-对象、类、实例、封装、继承、多态" class="sidebar-link">3. 对象、类、实例、封装、继承、多态</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-对象模型的五个层次以及ooa的五项建模活动" class="sidebar-link">4.  对象模型的五个层次以及OOA的五项建模活动</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-使用uml建模进行软件分析与设计-用例图、类图、时序图、部署图、构件图" class="sidebar-link">5. 使用UML建模进行软件分析与设计：用例图、类图、时序图、部署图、构件图</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_6-面向对象的设计准则" class="sidebar-link">6. 面向对象的设计准则</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_7-面向对象分析与设计说明书" class="sidebar-link">7. 面向对象分析与设计说明书</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结-5" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第六章软件编程实现" class="sidebar-link">第六章软件编程实现</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-软件实现的主要任务" class="sidebar-link">1. 软件实现的主要任务</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-软件实现的过程" class="sidebar-link">2. 软件实现的过程</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-软件实现的输入和输出" class="sidebar-link">3. 软件实现的输入和输出</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-面向对象实现的准则" class="sidebar-link">4. 面向对象实现的准则</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-软件版本管理" class="sidebar-link">5. 软件版本管理</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_6-软件编程语言的发展与分类" class="sidebar-link">6. 软件编程语言的发展与分类</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_7-软件实现阶段有哪些文档" class="sidebar-link">7. 软件实现阶段有哪些文档</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结-6" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第七章软件测试调试与维护" class="sidebar-link">第七章软件测试调试与维护</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-软件测试定义" class="sidebar-link">1. 软件测试定义</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-软件测试的最主要任务" class="sidebar-link">2. 软件测试的最主要任务</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-软件测试的步骤有哪些-每个步骤的主要内容和测试防范什么" class="sidebar-link">3. 软件测试的步骤有哪些？每个步骤的主要内容和测试防范什么？</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-软件测试方法主要分哪几种-软件测试方法主要分为哪几类-每类方法又分别有哪些测试技术方法" class="sidebar-link">4. 软件测试方法主要分哪几种？软件测试方法主要分为哪几类？每类方法又分别有哪些测试技术方法？</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-黑盒测试的分类-等价类、边界值等" class="sidebar-link">5. 黑盒测试的分类（等价类、边界值等）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_6-等价类和边界值测试用例的设计" class="sidebar-link">6. 等价类和边界值测试用例的设计</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_7-白盒测试的语句覆盖、分支覆盖、条件覆盖等" class="sidebar-link">7. 白盒测试的语句覆盖、分支覆盖、条件覆盖等</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_8-软件调试的任务是什么-有哪两部分组成" class="sidebar-link">8. 软件调试的任务是什么？有哪两部分组成</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_9-软件调试的方法" class="sidebar-link">9. 软件调试的方法</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_10-软件维护的概念和分类-完善、适应、纠错、预防" class="sidebar-link">10. 软件维护的概念和分类（完善、适应、纠错、预防）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_11-软件测试分析文档" class="sidebar-link">11. 软件测试分析文档</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结-7" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#第八章软件项目管理" class="sidebar-link">第八章软件项目管理</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_1-项目管理的五个过程、十大知识领域-重要的几个领域的含义" class="sidebar-link">1. 项目管理的五个过程、十大知识领域，重要的几个领域的含义</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_2-范围管理、成本-可行性分析部分讲过的投资收益比-和进度管理的内容" class="sidebar-link">2. 范围管理、成本（可行性分析部分讲过的投资收益比）和进度管理的内容</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_3-进度估算的方法-定额估算法、经验公式法、cpm等" class="sidebar-link">3. 进度估算的方法（定额估算法、经验公式法、CPM等）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_4-进度管理的图形工具-甘特、网络、里程碑、资源等" class="sidebar-link">4. 进度管理的图形工具（甘特、网络、里程碑、资源等）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_5-常用的网络图-单、双-、关键路径的分析、工期的估算" class="sidebar-link">5. 常用的网络图（单、双）、关键路径的分析、工期的估算</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_6-质量管理、风险管理的概念" class="sidebar-link">6. 质量管理、风险管理的概念</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_7-质量特性" class="sidebar-link">7. 质量特性</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_8-风险管理-识别、评估、预防、监控" class="sidebar-link">8. 风险管理（识别、评估、预防、监控）</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#_9-熟悉利用project进行任务分解、计算工期、分配资源、查看成本" class="sidebar-link">9. 熟悉利用PROJECT进行任务分解、计算工期、分配资源、查看成本</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#小结-8" class="sidebar-link">小结</a></li></ul></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#软件项目" class="sidebar-link">软件项目</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#题目总结" class="sidebar-link">题目总结</a></li><li class="sidebar-sub-header"><a href="/blog/views/software/01.html#押题" class="sidebar-link">押题</a></li></ul></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>算法设计</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>Spring学习</span> <span class="arrow right"></span></p> <!----></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="软件工程实践复习"><a href="#软件工程实践复习" class="header-anchor">#</a> 软件工程实践复习</h1> <p>课程目录</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109165036.png" alt="image-20210109165035177"></p> <h2 id="第一章软件工程基础"><a href="#第一章软件工程基础" class="header-anchor">#</a> 第一章软件工程基础</h2> <h3 id="_1-软件的定义p4"><a href="#_1-软件的定义p4" class="header-anchor">#</a> 1. 软件的定义p4</h3> <p><strong>软件=程序+数据+文档+服务</strong></p> <ol><li><p>数据是信息的表达方式和载体，是使程序正常进行信息处理的结构及表示</p></li> <li><p>文档是与程序开发、维护及使用有关的技术数据和图文资料</p></li> <li><p>服务主要指对各种软件用户的服务，包括提供软件产品使用说明书、推销服务及售后技术支持等</p></li></ol> <h3 id="_2-软件工程三要素p8"><a href="#_2-软件工程三要素p8" class="header-anchor">#</a> 2. 软件工程三要素p8</h3> <p>软件工程方法、软件工具、软件工程过程</p> <h3 id="_3-软件危机产生的原因以及解决措施"><a href="#_3-软件危机产生的原因以及解决措施" class="header-anchor">#</a> 3. 软件危机产生的原因以及解决措施</h3> <p><strong>原因：</strong></p> <p>(1) 软件开发的<strong>规模</strong>、<strong>复杂度</strong>和<strong>需求量</strong>都在不断增加及变化。</p> <p>(2) 软件（系统）需求分析与设计不完善、有欠缺，致使软件开发、维护和管理或文档出现问题。</p> <p>(3) 没有按照工程化方式运作，开发过程无统一标准、准则和规范方法。</p> <p>(4) 研发人员之间或同用户相互交流沟通不够或文档资料不完备。</p> <p>(5) 软件测试调试不规范、不细致，提交的软件质量不达标。</p> <p>(6) 在软件运行过程中，忽视软件运行过程中的正常有效的维护和管理。</p> <p><strong>措施：</strong></p> <p>(1) 技术方法。运行软件工程的技术、方法和标准进行规范。</p> <p>(2) 开发工具。选用先进高效的软件工具，采用切实可行的实施策略。</p> <p>(3) 组织管理。研发机构需要组织高效、管理制度和标准严格规范、职责明确、质量保证有力、团结互助、齐心协力，注重文档及服务。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110131601.png" alt="image-20210110131600088"></p> <h3 id="_4-软件工程的概念"><a href="#_4-软件工程的概念" class="header-anchor">#</a> 4. 软件工程的概念</h3> <p><strong>软件工程=工程原理 + 技术方法 + 管理技术</strong></p> <h3 id="_5-软件工程的4个发展阶段"><a href="#_5-软件工程的4个发展阶段" class="header-anchor">#</a> 5. 软件工程的4个发展阶段</h3> <ol><li>传统软件工程、</li> <li>对象工程、</li> <li>过程工程、</li> <li>构件工程</li></ol> <h3 id="_6-软件工程的知识体系"><a href="#_6-软件工程的知识体系" class="header-anchor">#</a> 6. 软件工程的知识体系</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210108175516.png" alt="image-20210108175514945"></p> <h3 id="_7-软件工程三要素"><a href="#_7-软件工程三要素" class="header-anchor">#</a> 7. 软件工程三要素</h3> <ol><li><strong>软件工程方法</strong></li> <li><strong>软件工具</strong></li> <li><strong>软件工程过程</strong></li></ol> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109170111.png" alt="image-20210109170109994"></p> <h3 id="_8-软件生命周期的概念以及分为几个阶段-并各阶段的任务"><a href="#_8-软件生命周期的概念以及分为几个阶段-并各阶段的任务" class="header-anchor">#</a> 8. 软件生命周期的概念以及分为几个阶段，并各阶段的任务</h3> <p>软件生命周期是从<strong>开始研发</strong>软件到<strong>软件停止使用</strong>的<strong>整个过程</strong>。</p> <p><strong>七个阶段</strong></p> <ol><li>开发策划：完成问题定义、可行性研究、项目申报立项和制订开发计划与准备，明确“要解决的问题是什么”</li> <li>需求分析：需求分析和定义阶段任务不是具体地解决问题，而是确定软件必须具备的具体功能、性能等，即“必须做什么”及其他指标要求。</li> <li>总体设计：也称概要设计，主要设计软件系统的总体结构，结构的组成模块，模块的层次结构、调用关系及功能，并设计总体数据结构等。</li> <li>详细设计：对模块功能、性能、可靠性、接口、界面、网络和数据库等进行具体设计的技术描述，并转化为过程描述。</li> <li>编写程序：又称为编码实现，将模块的控制结构转换成程序代码。</li> <li>测试：为了保证软件系统要求和质量标准，在设计测试用例的基础上对软件进行检测、调试、修改和完善等。</li> <li>运行维护：对交付并投入使用的软件进行维护，并记录保存文档。</li></ol> <h3 id="_9-传统的软件生命周期模型及各自特点-瀑布、原型和螺旋"><a href="#_9-传统的软件生命周期模型及各自特点-瀑布、原型和螺旋" class="header-anchor">#</a> 9. 传统的软件生命周期模型及各自特点（瀑布、原型和螺旋）</h3> <p>瀑布模型的特点：开发过程的顺序性；统筹兼顾不过早编程；严格要求保证质量。</p> <p>原型的特点：实际可行；具有最终系统的基本特征；构造方便、快速，造价低。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109191411.png" alt="image-20210109191410246"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109170706.png" alt="image-20210109170705271"></p> <p><strong>螺旋模型的特点：</strong></p> <p>(1) 是一个演化软件过程模型，将原型实现的<strong>迭代特征</strong>与瀑布模型的<strong>线性顺序</strong>模型中控制的和系统化的方面结合起来；</p> <p>(2) 开发过程具有周期性重复的螺旋线状。强调了<strong>风险分析</strong>；</p> <p>(3) 采用<strong>循环的方式</strong>逐步深入；</p> <p>(4) 确定系列<strong>里程碑</strong>，确保客户满意</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109190957.png" alt="image-20210109190955956"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109221048.png" alt="image-20210109221047765"></p> <h3 id="_10-面向对象的生命周期模型有哪些-rup-初始、细化、构造、交互-构件复用-及各自特点"><a href="#_10-面向对象的生命周期模型有哪些-rup-初始、细化、构造、交互-构件复用-及各自特点" class="header-anchor">#</a> 10. 面向对象的生命周期模型有哪些（RUP(初始、细化、构造、交互)，构件复用）及各自特点</h3> <p><strong>统一开发过程RUP</strong>（Rational Unified Process）：<strong>用例驱动，以构架为中心</strong>，<strong>采用迭代增量的开发策略</strong></p> <p>(1) RUP的二维开发模型及其核心工作流。主要包括：商业建模、需求、分析与设计、实现、测试、核心支持工作流、部署、配置和变更管理、项目管理和环境。</p> <p>(2) 开发中各阶段和里程碑，主要包括。初始阶段、细化阶段、构造阶段、交付阶段。</p> <p>(3) RUP的迭代开发模式。如下图所示</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210108175826.png" alt="image-20210108175824760"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109191222.png" alt="image-20210109191221029"></p> <h3 id="_11-敏捷软件开发过程模型的价值观"><a href="#_11-敏捷软件开发过程模型的价值观" class="header-anchor">#</a> 11. 敏捷软件开发过程模型的价值观</h3> <p>(1) 个体和交互胜过过程和工具</p> <p>(2) 可以工作的软件胜过面面俱到的文档</p> <p>(3) 客户合作胜过合同谈判</p> <p>(4) 响应变化胜过遵循计划</p> <h3 id="小结"><a href="#小结" class="header-anchor">#</a> 小结</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109200427.png" alt="image-20210109200426598"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109200606.png" alt="image-20210109200605141"></p> <h2 id="第二章可行性分析"><a href="#第二章可行性分析" class="header-anchor">#</a> 第二章可行性分析</h2> <h3 id="_1-可行性分析的概念"><a href="#_1-可行性分析的概念" class="header-anchor">#</a> 1. 可行性分析的概念</h3> <p><strong>可行性分析</strong>也称<strong>可行性研究</strong>，是对拟研发软件项目（或称为申报的“拟研发立项问题”）分析论证<strong>可行性</strong>和<strong>必要性</strong>的过程。主要从<strong>技术</strong>、<strong>经济</strong>、<strong>社会</strong>等方面分析其可行性，并根据软件运行环境、软硬件及数据资源与处理要求、研发能力和效益等情况，确定立项开发的必要性，并在确定可行必要后提出初步方案，形成“<strong>可行性分析报告”</strong>,之后还需要进行立项并制定出研发计划,以便于进行有效研发。</p> <h3 id="_2-可行性分析的三个重要方面"><a href="#_2-可行性分析的三个重要方面" class="header-anchor">#</a> 2. 可行性分析的三个重要方面</h3> <ol><li><strong>技术可行性分析</strong></li> <li><strong>经济可行性分析</strong></li> <li><strong>社会可行性分析</strong></li></ol> <h3 id="_3-成本效益分析"><a href="#_3-成本效益分析" class="header-anchor">#</a> 3. 成本效益分析</h3> <p>经济可行性分析（Economic Feasibility）也称<strong>成本效益分析</strong>或<strong>投资</strong>／效益分析，主要从资源配置的角度衡量软件项目的实际价值，分析研发软件项目<strong>所需成本费用</strong>和项目开发成功后所带来的<strong>经济效益</strong>。分析软件的经济可行性，实际就是分析软件项目的<strong>有效价值</strong>。</p> <blockquote><p>（1）投入产出比。是指软件项目<strong>全部投资</strong>与<strong>产出增加值总和</strong>之比。
R=K/IN
(K为投资总额，IN为软件生存期内各年增加值的总和)
（2）货币的时间价值。由于利率的变化等因素，货币的时间价值能较准确地估算。假设年利率为i，若项目开发所需经费即投资为P元,则n年后可得资金数为F元：
F = P﹒(1+ⅰ) n
反之，若n年后可得效益为F元，则这些资金现在的价值为：
P = F ∕ (1+ⅰ) n</p></blockquote> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109202528.png" alt="image-20210109202526688"></p> <p>修正下：</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110184403.png" alt="image-20210110184337785"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109202731.png" alt="image-20210109202730837"><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109202749.png" alt="image-20210109202747474"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109203118.png" alt="image-20210109203117001"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109205713.png" alt="image-20210109205712233"></p> <p>所以121000/1.21=100000</p> <p>加上第一年的现值+=100000</p> <p>=200000</p> <h3 id="_4-系统流程图的意义及其绘制"><a href="#_4-系统流程图的意义及其绘制" class="header-anchor">#</a> 4. 系统流程图的意义及其绘制</h3> <p>(1) 对于软件相关的具体主要物理系统的实际描述和表示</p> <p>(2) 全面了解系统业务处理过程和进一步分析系统结构的依据</p> <p>(3) 系统分析员、管理人员、业务操作人员相互交流确认的工具</p> <p>(4) 可直接在系统流程图上，拟出软件系统可实现处理的主要部分</p> <p>(5) 可利用系统流程图分析业务流程及其合理性。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109203350.png" alt="image-20210109203349076"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109203303.png" alt="image-20210109203301553"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109203350.png" alt="image-20210109203320330"></p> <h3 id="_5-会撰写可行性分析报告"><a href="#_5-会撰写可行性分析报告" class="header-anchor">#</a> 5. 会撰写可行性分析报告</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109203548.png" alt="image-20210109203547341"></p> <h3 id="小结-2"><a href="#小结-2" class="header-anchor">#</a> 小结</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109203848.png" alt="image-20210109203846969"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109203900.png" alt="image-20210109203859208"></p> <blockquote><p><strong>净现值</strong>指<strong>未来</strong>资金(现金)流入(<strong>收入</strong>)现值与<strong>未来</strong>资金(现金)流出(<strong>支出</strong>)现值的差额。</p></blockquote> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109204924.png" alt="image-20210109204718330"></p> <h2 id="第三章结构化需求分析"><a href="#第三章结构化需求分析" class="header-anchor">#</a> 第三章结构化需求分析</h2> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109213229.png" alt="image-20210109213228566"></p> <h3 id="_1-需求分析的概念和任务"><a href="#_1-需求分析的概念和任务" class="header-anchor">#</a> 1. 需求分析的概念和任务</h3> <p>软件需求分析通常是软件需求分析师经过深入细致的调研和分析，准确理解用户需求和项目的功能、性能、可靠性等具体要求，将用户非形式化的需求表述转化为完整的具体需求定义，<strong>再将需求定义写成需求规划的过程</strong>。（课本）</p> <p>需求分析主要是搞清软件应用用户的实际具体需求，包括功能需求、性能需求、数据需求、安全及可靠性要求、运行环境和将来可能的业务变化及拓展要求等，并建立系统的逻辑模型，写出“软件需求规格说明(SRS)”等文档。（PPT）</p> <p><strong>任务：</strong></p> <p>(1) 确定目标系统的具体要求</p> <p>(2) 建立目标系统的逻辑模型</p> <p>(3) 编写需求文档，验证确认需求</p> <h3 id="_2-软件需求包含哪些类别"><a href="#_2-软件需求包含哪些类别" class="header-anchor">#</a> 2. 软件需求包含哪些类别</h3> <ol><li><p>业务需求</p></li> <li><p>用户需求</p></li> <li><p>功能需求，此外还包括某些类别的非功能需求</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109214014.png" alt="image-20210109214013128"></p></li></ol> <h3 id="_3-结构化分析的概念、指导思想和基本原则"><a href="#_3-结构化分析的概念、指导思想和基本原则" class="header-anchor">#</a> 3. 结构化分析的概念、指导思想和基本原则</h3> <p>结构化开发方法主要特点是快速、自然和便捷，结构化开发方法由结构化分析方法（SA法）、结构化设计方法（SD法）及结构化程序设计方法（SP法）构成。</p> <p>结构化分析（Structured Analysis，SA）方法是面向数据流的需求分析方法，SA方法根据软件内部的数据传递、变换关系，<strong>自顶向下</strong>、<strong>逐层分解</strong>，绘出满足功能要求的模型。</p> <p><strong>结构化方法总的指导思想是“自顶向下、逐步求精（如图3-2所示）”，其基本原则是抽象与分解。</strong></p> <h3 id="_4-结构化分析常用的工具有哪些-各有什么作用和特点"><a href="#_4-结构化分析常用的工具有哪些-各有什么作用和特点" class="header-anchor">#</a> 4. 结构化分析常用的工具有哪些？各有什么作用和特点</h3> <p>答：</p> <ol><li>ER图作为数据建模的基础，作用是清晰地表达目标系统中数据之间地练习及组织方式，实体模型由<strong>实体、联系和属性</strong>三个基本成分组成</li> <li>数据流图作为功能建模的基础，作用是描述系统内部的数据流程，表达各处理环节之间的数据联系</li> <li>状态转换图作为行为建模的基础，作用是描绘系统的状态及引起系统状态转换的事件,来表示系统的行为，分为：初始状态、终态、结束状态和中间状态。</li> <li>数据字典作为模型的核心，主要作用是和数据流图共同构成系统的逻辑模型，是数据描述的重要组成部分。数据字典有4类条目：数据流、数据项、文件及基本加工</li></ol> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109214533.png" alt="image-20210109214408079"></p> <p>结构化分析导出的分析模型包括<strong>数据模型</strong>､功能模型和<strong>行为模型</strong>，这些模型以“<strong>数据字典</strong>”为核心，如图3-3所示｡其中，实体关系图(E-R图Entity Relationship Diagram)作为数据建模的基础；数据流图(<strong>DFD</strong>，Data Flow Diagram)作为功能建模的基础；状态转换图(STD，State Transition Diagram)作为行为建模的基础｡</p> <blockquote><p>(1) 实体关系图(E-R图)是目前最常用的数据建模方法。主要用于在需求分析阶段<strong>清晰地表达目标系统中数据之间的联系及其组织方式，建立系统的实体数据模型(E-R模型)</strong>。实体模型由<strong>实体、联系和属性</strong>三个基本成分组成</p> <p>E-R图由矩形框、菱形框、椭圆或圆角矩形及连线组成。其中，矩形框表示实体，菱形框表示关系，椭圆或圆角矩形表示实体（或关系）的属性。</p> <hr> <p>(2) <strong>数据流图(<strong>DFD)是一种图形化的系统模型。运用图形方式描述系统</strong>内部的数据流程</strong>，表达系统的各处理环节之间的数据联系，是结构化系统分析方法的主要表达工具。<strong>DFD是结构化分析的最基本工具</strong>。</p> <hr> <p>(3) 数据词典(DD)是指存储数据源定义和属性(描述说明)文档，是数据描述的重要组成部分。数据字典有4类条目：数据流、数据项、文件及基本加工。在定义数据流或文件时，使用下表给出的符号。将这些条目按照一定的规则进行组织，构成数据字典。</p> <p>数据字典要求：<strong>完整性、一致性和可用性</strong>。</p> <p>a) 数据流条目。给出了DFD中数据流的定义，通常对数据流的简单描述为列出该数据流的各组成数据项。主要包括：数据流名称、别名及简述、数据流来源和去处、数据流组成、流通量。</p> <p>b) 文件条目。给出某个文件的定义，文件的定义通常是列出文件记录的组成数据流，还可指出文件的组织方式。</p> <p>c) 数据项条目。给出某个数据单项的定义，通常是该数据项的值类型、允许值等</p> <p>d) 加工条目。是对DFD的补充，实际是“加工小说明”。由于“加工”是DFD的重要组成部分，一般应单独进行说明。因此，数据字典是对DFD中所包含各种元素定义(数据项、结构、特征、加工、流向等)的集合。对4类条目：描述数据流、数据项、文件及基本加工</p></blockquote> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109214738.png" alt="image-20210109214737230"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109215144.png" alt="image-20210109215143624"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109215439.png" alt="image-20210109215438417"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220128.png" alt="image-20210109220127174"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220351.png" alt="image-20210109220349343"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220419.png" alt="image-20210109220417070"></p> <blockquote><p>(4) <strong>处理过程描述</strong></p> <p>a) 结构化语言是一种介于自然语言(英语或汉语)和形式语言之间的半形式化语言。专门用于描述一个功能单元逻辑要求。结构化语言有三种结构形式</p> <p>i. 顺序结构。以一组祈使语句、选择语句、重复语句的顺序排列</p> <p>ii. 选择结构。常用IF-THEN( -ELASE)-ENDIF或 CASE-OF-ENDCASE等关键词构成的语句结构</p> <p>iii. 循环结构。常用 DO-WHILE-ENDDO或REPEAT-UNTIL等关键词的语句结构</p> <p>b) 判定树(Decision Tree)也称为判断树或决策树，用判定树描述一个功能模块逻辑处理过程，其基本思路与结构化语言完全类似，是结构化语言的另一种更为直观方便的逻辑表现形式。</p> <p>特点：描述一般组合条件较清晰。缺点：不易输入计算机。</p> <p>c) 判定表也称为决策表，与结构化语言和判定树方法相比其优点是能够将所有的条件组合充分地表达出来。缺点是判定表的建立过程较为繁杂，且表达方式不如前两者简便。判定表由4个部分组成： 条件定义、条件取值及组合、结果(操作定义)、取值组合结果(操作</p> <hr> <p>(5) <strong>状态转换图</strong>：在对系统进行需求分析时，除建立系统的数据模型和功能模型外，有时还需要建立系统的行为模型。</p> <p>状态：状态代表系统的一种行为模式。在状态转换图中，状态又可以分为：初始状态、终态、结束状态和中间状态。三类状态的表示符号如下图所示</p> <p>![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml29584\wps17.jpg)</p> <p>初始状态：简称初态，系统启动时进入的状态。</p> <p>最终状态：简称终态，系统运行结束时到达的状态。</p> <p>状态迁移：一个状态向另一个状态转换。用箭头表示从种状态向另一种状态的迁移。</p> <p>事件：是在某个特定时刻发生的事情，它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。</p> <p>事件的语法格式为：事件说明[条件] / 动作表达式</p></blockquote> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220458.png" alt=""></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220512.png" alt="image-20210109220456937"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220652.png" alt="image-20210109220650814"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220806.png" alt="image-20210109220805400"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220946.png" alt="image-20210109220945375"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109220917.png" alt="image-20210109220916674"></p> <p>pad：问题分析图</p> <h3 id="_5-结构化分析建模"><a href="#_5-结构化分析建模" class="header-anchor">#</a> 5. 结构化分析建模</h3> <ul><li><p>a) <strong>功能建模</strong>（绘制<strong>数据流图</strong>，建造数据字典，数据流图的四种基本符号：数据源（终点）、数据加工、数据存储、数据流）</p></li> <li><p>b) <strong>数据建模（E-R）</strong></p></li> <li><p>c) <strong>行为建模（状态图）</strong></p></li> <li><p>d) <strong>数据字典</strong></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109221930.png" alt="image-20210109221929714"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109222122.png" alt="image-20210109222121113"></p></li></ul> <h3 id="小结-3"><a href="#小结-3" class="header-anchor">#</a> 小结</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109221509.png" alt="image-20210109221434982"></p> <h2 id="第四章系统设计"><a href="#第四章系统设计" class="header-anchor">#</a> 第四章系统设计</h2> <h3 id="_1-软件设计的2个阶段"><a href="#_1-软件设计的2个阶段" class="header-anchor">#</a> 1. 软件设计的2个阶段</h3> <ol><li>总体(概要)设计</li> <li>详细设计</li></ol> <h3 id="_2-总体设计阶段的主要任务是什么"><a href="#_2-总体设计阶段的主要任务是什么" class="header-anchor">#</a> 2. 总体设计阶段的主要任务是什么</h3> <p>软件总体设计的任务主要包括：</p> <p>(1) 软件的总体结构和模块外部设计。——软件结构图</p> <p>(2) 软件处理流程设计。——模块、子模块及数据调用关系</p> <p>(3) 确定软件的功能并分配(与程序结构的关系)。</p> <p>(4) 数据总体结构设计(逻辑-物理-数据结构与程序的关系)</p> <p>(5) 网络及接口概要设计。</p> <p>(6) 运行概要设计。</p> <p>(7) 出错处理概要设计</p> <p>(8) 性能可靠性及安全保密概要设计</p> <p>(9) 维护概要设计</p> <h3 id="_3-常见的体系结构风格"><a href="#_3-常见的体系结构风格" class="header-anchor">#</a> 3. 常见的体系结构风格</h3> <p>管道/过滤器、层次系统、虚拟机</p> <h3 id="_4-模块化、信息隐蔽、分解、耦合、内聚"><a href="#_4-模块化、信息隐蔽、分解、耦合、内聚" class="header-anchor">#</a> 4. 模块化、信息隐蔽、分解、耦合、内聚</h3> <p>(1) 软件工程模块化：<strong>模块</strong>是模块是指一个独立命名的，拥有明确定义的输入/输出和特性的<strong>程序实体</strong>。模块化(Modular)是将复杂软件划分为功能相对独立且易于处理的模块的过程，是<strong>概要设计</strong>主要的工作之一。</p> <p>(2) 信息隐蔽：指模块所包含的“过程及数据”信息，对于其他模块需要隐蔽。模块规定和设计应遵从：使包含在模块中的“过程或数据”信息，对于其它不需要这些信息的模块，不能访问或“不可见”。</p> <p>(3) 分解：子系统及模块划分（除了高内聚、低耦合）还应考虑：</p> <ol><li>模块大小适当。</li> <li>模块的层次结构。</li></ol> <p>(4) 内聚。标志一个模块内各个元素彼此结合的紧密程度，是信息隐蔽和局部化概念的自然扩展。设计时应该力求做到高内聚</p> <p>(5) 耦合。是对软件结构不同模块之间互连程度的度量，是影响软件复杂程度的一个重要因素。模块间的耦合程度将影响系统的可理解性、可测试性、可靠性和可维护性(力求做到低耦合)</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109222742.png" alt="image-20210109222742051"></p> <h3 id="_5-数据流的分类"><a href="#_5-数据流的分类" class="header-anchor">#</a> 5. 数据流的分类</h3> <p><strong>结构化设计(Structured Design,SD)<strong>方法是一种典型的</strong>面向数据流</strong>(<strong>核心和关键</strong>)的设计方法,主要完成<strong>软件总体结构设计</strong>。</p> <p>(1) <strong>中心变换型(transform center)</strong>。如下图所示，该类图的特点是：DFD 图可以明显分为“输入—处理(变换)—输出”三部分，对这种类型的DFD 图的转换采用变换分析技术。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109223420.png" alt="img"></p> <p>(2) <strong>事务处理型(transaction)</strong>。事务是指完成作业要求功能处理的最小单元。事务型数据流图如图4-9所示，输入流在经过某个“事务中心”时接收输入数据并分析确定其类型，然后根据所确定的类型为数据选择其中的一条加工路径。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109223555.png" alt="img"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109223744.png" alt="image-20210109223743586"></p> <h3 id="_6-结构化设计建模工具"><a href="#_6-结构化设计建模工具" class="header-anchor">#</a> 6. 结构化设计建模工具</h3> <p>1.模块结构图</p> <p>2.结构图</p> <p>3.HIPO图</p> <p>4.H图</p> <p>5.IPO图</p> <p>(1) <strong>模块结构图</strong>（中心变换型）</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224040.png" alt="img"></p> <p>(2) <strong>事务型软件结构图</strong></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224049.png" alt="img"></p> <p>(3) <strong>HIPO图</strong></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224158.png" alt="image-20210109224155915"></p> <p>a) <strong>H图</strong>——层次图</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224143.jpg" alt="img"></p> <p>b) <strong>IPO图</strong>——输入-输出-处理图</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224215.jpg" alt="img"></p> <p>c) HIPO图——改进的IPO图（IPO表）的形式</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224237.jpg" alt="img"></p> <h3 id="_7-详细设计过程的任务是什么"><a href="#_7-详细设计过程的任务是什么" class="header-anchor">#</a> 7. 详细设计过程的任务是什么</h3> <p>(1) 模块功能及(处理)算法设计。</p> <p>(2) 模块内的数据结构设计。</p> <p>(3) 模块接口设计。</p> <p>(4) 其他设计（BD、网络、代码、接口、界面等）。</p> <p>(5) 模块测试用例设计。</p> <p>(6) 编写详细设计文档。</p> <p>(7) 详细设计评审。</p> <h3 id="_8-数据设计-数据结构、文件、数据库设计"><a href="#_8-数据设计-数据结构、文件、数据库设计" class="header-anchor">#</a> 8. 数据设计（数据结构、文件、数据库设计）</h3> <p>数据库设计的任务及步骤为数据库应用程序（处理过程）和数据库（数据结构与数据表及数据）的需求分析、概念结构设计、逻辑结构设计、物理结构设计等阶段。</p> <p>a) 需求分析。可以在软件需求分析阶段完成，也可以进一步深入企事业实际进行具体的调研分析，主要任务是调查、深入分析和确认业务用户数据需求与处理需求。</p> <p>b) 概念结构设计。目的是获取数据库的概念数据模型，通常有两种方法；一是设计<strong>实体联系模型（E-R图）</strong>，二是面向对象的方法，以类或对象形式表示数据及其之间联系。</p> <p>c) 逻辑结构设计。主要任务是将概念模型转化为终端可以实现的<strong>传统数据模型</strong>，如转化为关系模型，需要根据所选数据库得到具体的关系数据模式，即二维表结构。</p> <p>d) 物理结构设计。主要是根据数据模型及处理要求，<strong>选择存储结构和存取方法</strong>，以求获得最佳的存取效率。主要包括：数据库文件组织形式（顺序文件或随机文件）、索引文件组织结构、存储介质的分配、存取系统的选择等。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224552.png" alt="image-20210109224551361"></p> <h3 id="_9-详细设计三大类工具-图形、表格和语言-程序流程图、pad图、盒图、过程设计语言、判定表和判定树"><a href="#_9-详细设计三大类工具-图形、表格和语言-程序流程图、pad图、盒图、过程设计语言、判定表和判定树" class="header-anchor">#</a> 9. 详细设计三大类工具（图形、表格和语言）（程序流程图、PAD图、盒图、过程设计语言、判定表和判定树）</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224812.png" alt="image-20210109224811549"></p> <ul><li>细设计常用工具包括以下三种:<strong>图形</strong>、<strong>表格</strong>、<strong>语言</strong></li></ul> <p>(1) <strong>图形工具</strong>是将过程细节用图形进行表示，  如流程图、盒图、问题分析图(PAD)等。</p> <p>a) <strong>程序流程图</strong>：<strong>程序流程图</strong>也称为<strong>程序框图</strong>，是常用的一种算法表达工具。</p> <p>优点：直观清晰，易学习掌握。</p> <p>缺点：从发展趋势看，使用的人逐渐减少。不是求精的好工具，不可以表示数据结构，使程序员过早考虑程序控制细节，不利于理解大型程序。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109224950.png" alt="img"></p> <p>b) <strong>结构流程图</strong>：软件的<strong>结构流程图</strong>也称为<strong>盒图</strong>或<strong>N-S 图</strong>。表示软件的控制结构如图4-14所示。</p> <p>优点:图中不能随意转移控制（无流程线），程序结构更符合结构化程序设计的思想，有利于培养软件设计人员良好的设计风格。</p> <p>缺点:程序嵌套层次较多时影响可读性而且不易修改。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109225156.png" alt="img"></p> <p>c) <strong>问题分析图(PAD)</strong>：问题分析图（PAD）采用了<strong>二维树形结构</strong>的图形符号表示程序的控制结构。</p> <p>优点:<strong>程序结构层次清晰；支持自顶向下、逐步求精的设计过程</strong>；既可描述程序的逻辑结构，又能描述系统的数据结构；遵循机械的走树(Ttee Walk)规则，容易转换为高级语言源程序；易读、易懂、易记。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109225223.jpg" alt="img"></p> <p>(2) <strong>表格工具</strong>。用于将处理过程细节用表格形式表示，如<strong>决策表</strong>（<strong>判定表</strong>）等。</p> <p>(3) <strong>语言工具</strong>。主要用于将处理过程细节用语言形式表示，如<strong>结构化语言</strong>等。此外，还可以使用<strong>过程设计语言PDL</strong>。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109225838.png" alt="image-20210109225837160"></p> <h3 id="_10-结构化软件设计说明书"><a href="#_10-结构化软件设计说明书" class="header-anchor">#</a> 10. 结构化软件设计说明书</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109230107.png" alt="image-20210109230106192"></p> <h3 id="小结-4"><a href="#小结-4" class="header-anchor">#</a> 小结</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109230131.png" alt="image-20210109230130589"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109230518.png" alt="image-20210109230503075"></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210109230605.png" alt="image-20210109230605158"></p> <h2 id="第五章面向对象开发方法"><a href="#第五章面向对象开发方法" class="header-anchor">#</a> 第五章面向对象开发方法</h2> <h3 id="_1-对象及其三要素"><a href="#_1-对象及其三要素" class="header-anchor">#</a> 1. 对象及其三要素</h3> <p><strong>对象是描述客观事物的实体，是构成系统的基本单位。</strong></p> <p>对象具有三要素：<strong>对象标识</strong>、<strong>属性</strong>和<strong>服务</strong>。</p> <p>(1) <strong>对象标识为对象的名字</strong>，用于唯一地识别系统内部对象，在定义或使用对象时指定。</p> <p>(2) <strong>属性也称状态或数据</strong>， 用于描述对象的静态特征。在某些OOP（Object Oriented Programming面向对象编程）语言中，属性通常被称为成员变量或简称变量。</p> <p>(3) <strong>服务也称操作、行为或方法</strong>， 用于描述对象的动态特征，在某些OOP语言中，通常被称为成员函数或简称函数。</p> <h3 id="_2-面向对象的定义"><a href="#_2-面向对象的定义" class="header-anchor">#</a> 2. 面向对象的定义</h3> <p><strong>面向对象(Object Oriented，OO) 定义：</strong></p> <p><strong>面向对象= 对象 + 类 + 继承 + 消息通信，</strong></p> <p><strong>具有这4个概念的软件开发方法称为OOM。</strong></p> <p><strong>面向对象方法（OOM）<strong>是面向对象技术和方法在软件工程中的全面运用，包括</strong>面向对象分析（OOA）、面向对象设计(OOD)、面向对象编程（OOP)、面向对象测试(OOT)和面向对象维护等方法</strong></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110132111.png" alt="image-20210110132110746"></p> <h3 id="_3-对象、类、实例、封装、继承、多态"><a href="#_3-对象、类、实例、封装、继承、多态" class="header-anchor">#</a> 3. 对象、类、实例、封装、继承、多态</h3> <p>(1) 封装（Encapsulation）有两层含义：一是对象是其全部属性和全部服务紧密结合而形成的一个不可分割的整体；二是对象如同一个密封的“黑盒子”，表示对象状态的数据和实现操作的代码都被封装在其中。<strong>封装是对象的一个重要特性</strong>。在面向对象的系统中，对象是一个封装数据属性和操作行为的实体。</p> <p>(2) 类（Class）也称对象类（Object Class）是对具有相同属性和服务的一组对象的抽象定义。类与对象是抽象描述与具体实例的关系，<strong>一个具体的对象被称为类的一个实例（Instance）</strong>。</p> <p>(3) 继承（Inheritance）是父类和子类之间<strong>共享</strong>数据结构和方法的一种机制，是以现存的定义的内容为基础，建立新定义内容的技术，是类之间的一种关系。继承有两种：<strong>单重继承</strong>、<strong>多重继承</strong>。</p> <p>单重继承构成的类之间的层次关系为<strong>一树状</strong>，若将所有无子类的类，都看成还有一个公共子类， 多重继承构成的类之间的关系为一个网格，  而且继承关系可传递。</p> <p>建立继承结构的优点有3个：一是易编程、易理解且代码短， 结构清晰；二是易修改，共同部分只在一处修改即可；三是易增加新类，只须描述不同部分。</p> <p>(4) <strong>多态性</strong>（Polymorphism）是指多种类型的对象在<strong>相同的操作或函数</strong>、过程中<strong>取得不同结果的特性</strong>。多态有多种不同形式，其中参数多态和包含多态统称为通用多态，过载多态和强制多态则统称为特定多态。</p> <p><strong>动态绑定</strong>(Dynamic-binding)是多态性的基石之一。将函数调用与目标代码块的连接延迟到运行时进行，只有发送消息时才与接收消息实例的一个操作绑定。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110132158.png" alt="image-20210110132157148"></p> <h3 id="_4-对象模型的五个层次以及ooa的五项建模活动"><a href="#_4-对象模型的五个层次以及ooa的五项建模活动" class="header-anchor">#</a> 4.  对象模型的五个层次以及OOA的五项建模活动</h3> <p>对象模型常由五个层次组成：类与对象层、属性层、服务层、结构层和主题层，其层次对应着OOA过程中建立对象模型的五项主要活动：</p> <ol><li>发现类和对象、</li> <li>定义属性、</li> <li>定义服务、</li> <li>划分结构、</li> <li>识别主题。</li></ol> <h3 id="_5-使用uml建模进行软件分析与设计-用例图、类图、时序图、部署图、构件图"><a href="#_5-使用uml建模进行软件分析与设计-用例图、类图、时序图、部署图、构件图" class="header-anchor">#</a> 5. 使用UML建模进行软件分析与设计：用例图、类图、时序图、部署图、构件图</h3> <p>(1) 用例图是从用户角度描述系统功能， 是用户所能观察到的系统功能的模型图，用例是系统中的一个功能单元</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110000351.jpg" alt="img"></p> <p>(2) 类图描述系统中类的静态结构。不仅定义系统中的类，表示类之间的联系如关联、依赖、聚合等，也包括类的内部结构(类的属性和操作)</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110000401.jpg" alt="img"></p> <p>(3) 顺序图显示对象之间的动态合作关系，它强调对象之间消息发送的顺序，同时显示对象之间的交互</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110000818.jpg" alt="img"></p> <p>(4) 部署视图描述位于节点实例上的运行构件实例的安排。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110000914.jpg" alt="img"></p> <p>(5) 构件图为系统的构件建模型—构件即构造应用的软件单元—还包括各构件之间的依赖关系，以便通过这些依赖关系来估计对系统构件的修改给系统可能带来的影响</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110000925.jpg" alt="img"></p> <h3 id="_6-面向对象的设计准则"><a href="#_6-面向对象的设计准则" class="header-anchor">#</a> 6. 面向对象的设计准则</h3> <p><strong>OOD准则包括5个方面：</strong></p> <p>(1) <strong>抽象</strong>。强调实体本质内在属性，忽略无关紧要属性。</p> <p>(2) <strong>信息隐蔽</strong>。</p> <p>(3) <strong>高内聚</strong>。</p> <p>(4) <strong>低耦合</strong>。</p> <p>(5) <strong>可重用</strong>。</p> <h3 id="_7-面向对象分析与设计说明书"><a href="#_7-面向对象分析与设计说明书" class="header-anchor">#</a> 7. 面向对象分析与设计说明书</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110001133.png" alt="image-20210110001132099"></p> <h3 id="小结-5"><a href="#小结-5" class="header-anchor">#</a> 小结</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110001227.png" alt="image-20210110001226762"></p> <h2 id="第六章软件编程实现"><a href="#第六章软件编程实现" class="header-anchor">#</a> 第六章软件编程实现</h2> <h3 id="_1-软件实现的主要任务"><a href="#_1-软件实现的主要任务" class="header-anchor">#</a> 1. 软件实现的主要任务</h3> <blockquote><p>软件实现主要任务:</p> <p><strong>将软件详细设计的结果转换为目标软件</strong>。是对“详细设计”的工作进行具体实现，形成计算机/手机可运行程序。</p></blockquote> <h3 id="_2-软件实现的过程"><a href="#_2-软件实现的过程" class="header-anchor">#</a> 2. 软件实现的过程</h3> <p><strong>软件实现</strong>的过程包括<strong>编程</strong>和<strong>单元测试</strong></p> <h3 id="_3-软件实现的输入和输出"><a href="#_3-软件实现的输入和输出" class="header-anchor">#</a> 3. 软件实现的输入和输出</h3> <p>软件实现的<strong>输入</strong>:<strong>软件详细设计说明书</strong></p> <p>软件实现的<strong>输出</strong>:<strong>源程序、目标程序和用户手册</strong></p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110135611.png" alt="image-20210110135610526"></p> <h3 id="_4-面向对象实现的准则"><a href="#_4-面向对象实现的准则" class="header-anchor">#</a> 4. 面向对象实现的准则</h3> <p><strong>实现的准则</strong>主要包括：</p> <p>(1) 高可重用性。</p> <p>(2) 高可扩充性。</p> <p>(3) 高可靠性及健壮性。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110135723.png" alt="image-20210110135722510"></p> <h3 id="_5-软件版本管理"><a href="#_5-软件版本管理" class="header-anchor">#</a> 5. 软件版本管理</h3> <p>软件一般具有中间版本、α版本、β版本、发布版本和维护版本等，以不同标号标识。</p> <p>(1) 中间版本：软件未完成前且未进行正式测试的版本。一个软件可能会有多个中间版本，记录不同时间、不同人员开发的软件程序。</p> <p>(2) α版本：<strong>软件未完成</strong>但可以提交进行严格测试的软件版本。生存周期通常只有几天或几周。</p> <p>(3) β版本：**能够稳定运行的软件，可交付给终端用户进行测试。**是经过多个α版本的完整测试，确认没有问题后产生的，β版本提交给直接用户在实际工作中进行测试和检验，一般需要几个月的测试时间。</p> <p>(4) 发布版本：正式向社会发布或向用户提交使用的软件产品。</p> <p>(5) 维护版本：对发布的版本进行错误纠正，及功能或性能改进的版本。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110140002.png" alt="image-20210110140001957"></p> <h3 id="_6-软件编程语言的发展与分类"><a href="#_6-软件编程语言的发展与分类" class="header-anchor">#</a> 6. 软件编程语言的发展与分类</h3> <p>(1) 第一代语言：<strong>机器语言</strong>无需编译和转换就能被 CPU 直接使用。</p> <p>(2) 第二代语言：<strong>汇编语言</strong>。</p> <p>(3) 第三代语言：具有直接支持结构化构件，并具有很强的过程能力和数据结构能力特点的<strong>结构化与现代程序语言</strong>。分为三类：通用高级语言、面向对象的语言和专用语言。结构化程序语言<strong>Turbo C</strong>，面向对象的语言有<strong>C++、Java、Delphi</strong>等。</p> <p>(4) 第四代语言：<strong>超高级编程语言(4GL)</strong>， 不再涉及很多算法性细节.具有3个特征:强大数据管理能力，可对数据库有效存取、查询等操作;提供高效、非过程化命令，组成语言基本语句;可满足多功能一体化要求 。比如数据库查询语言、程序生成器等。</p> <p>(5) 分类</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110132641.jpg" alt="img"></p> <h3 id="_7-软件实现阶段有哪些文档"><a href="#_7-软件实现阶段有哪些文档" class="header-anchor">#</a> 7. 软件实现阶段有哪些文档</h3> <p>软件实现文档包括：软件产品规格说明(SPS)、计算机编程手册(CPM)和软件用户手册(SUM)。</p> <h3 id="小结-6"><a href="#小结-6" class="header-anchor">#</a> 小结</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110133930.png" alt="image-20210110133929157"></p> <h2 id="第七章软件测试调试与维护"><a href="#第七章软件测试调试与维护" class="header-anchor">#</a> 第七章软件测试调试与维护</h2> <h3 id="_1-软件测试定义"><a href="#_1-软件测试定义" class="header-anchor">#</a> 1. 软件测试定义</h3> <blockquote><p>软件测试（Software test）的定义：</p> <p>在规定的条件下对软件进行检测性运行操作，以发现程序错误，衡量软件质量，并对其是否能满足设计要求进行评估的过程。</p></blockquote> <h3 id="_2-软件测试的最主要任务"><a href="#_2-软件测试的最主要任务" class="header-anchor">#</a> 2. 软件测试的最主要任务</h3> <p>软件测试重点是测试软件的功能、性能和可靠性等是否符合用户需求指标，其中，<strong>“功能测试”<strong>是软件测试的</strong>最主要任务</strong>。</p> <h3 id="_3-软件测试的步骤有哪些-每个步骤的主要内容和测试防范什么"><a href="#_3-软件测试的步骤有哪些-每个步骤的主要内容和测试防范什么" class="header-anchor">#</a> 3. 软件测试的步骤有哪些？每个步骤的主要内容和测试防范什么？</h3> <h4 id="问题-软件测试的步骤有哪些-每个步骤的主要内容和测试方法是什么"><a href="#问题-软件测试的步骤有哪些-每个步骤的主要内容和测试方法是什么" class="header-anchor">#</a> 问题：软件测试的步骤有哪些?每个步骤的主要内容和测试方法是什么</h4> <p>答：</p> <p>软件测试分为单元测试、集成测试、有效性（确认）测试和系统测试4个步骤，最后进行验收测试。</p> <p>单元测试主要测试内容有：单元模块内和模块之间的功能测试，容错测试、边界测试、重要的执行路径测试，主要使用白盒测试技术。</p> <p>集成测试主要内容有：系统集成后的功能测试、业务流程测试、界面测试，主要测试方法一般采用的是白盒和黑盒结合的方法进行测试。</p> <p>有效性测试（确认测试）主要内容有：系统性的初始化测试、功能测试、性能测试，测试方法是黑盒测试的方法。</p> <p>系统测试测试主要内容有：恢复测试，安全测试，强度测试，性能测试，一般采取黑盒测试。</p> <p><strong>通常具体的软件测试分为单元测试、集成测试、有效性（确认）测试和系统测试4个步骤，最后进行验收测试</strong></p> <p>(1) 软件单元测试的主要内容包括：单元模块内和模块之间的功能测试、容错测试、边界测试、约束测试、界面测试、重要的执行路径测试，单元内的业务流程和数据流程等。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110144357.png" alt="image-20210110144356259"></p> <p>(2) 软件集成测试的主要内容包括：系统集成后的功能测试、业务流程测试、界面测试、重要的执行路径测试、容错测试、边界测试、约束测试及接口测试等。</p> <p>(3) 有效性测试的主要内容包括：系统性的初始化测试、功能测试、用户需求确认、业务处理或数据处理测试、性能测试、安全性测试、安装性测试、恢复测试、压力测试等。</p> <p>(4) 系统测试是对整个程序系统及人工过程与环境的总测试，目标主要是发现并纠正软件开发过程中所产生的错误。</p> <h3 id="_4-软件测试方法主要分哪几种-软件测试方法主要分为哪几类-每类方法又分别有哪些测试技术方法"><a href="#_4-软件测试方法主要分哪几种-软件测试方法主要分为哪几类-每类方法又分别有哪些测试技术方法" class="header-anchor">#</a> 4. 软件测试方法主要分哪几种？软件测试方法主要分为哪几类？每类方法又分别有哪些测试技术方法？</h3> <p>主要可分为<strong>黑盒测试</strong>和<strong>白盒测试</strong>两类，</p> <ul><li><strong>黑盒</strong>测试是<strong>功能测试</strong></li> <li><strong>白盒</strong>测试是<strong>逻辑测试</strong></li></ul> <ol><li>黑盒测试：等价分类法、边界值法、因果图法、错误判断法、决策表法</li> <li>白盒测试：语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖</li></ol> <h3 id="_5-黑盒测试的分类-等价类、边界值等"><a href="#_5-黑盒测试的分类-等价类、边界值等" class="header-anchor">#</a> 5. 黑盒测试的分类（等价类、边界值等）</h3> <p>(1) 等价分类法</p> <p>a) 划分等价类。根据输入条件将输入数据划分为等价类。</p> <p>b) 设计测试用例。</p> <p>(2) 边界值分析法</p> <p>边界值分析法主要包括6个方面：</p> <p>a) 测试数据。</p> <p>b) 输出条件。</p> <p>c) 输入边界数据。</p> <p>d) 有序集测试用例。</p> <p>e) 内部数据结构边界值。</p> <p>f) 其他边界条件。</p> <h3 id="_6-等价类和边界值测试用例的设计"><a href="#_6-等价类和边界值测试用例的设计" class="header-anchor">#</a> 6. 等价类和边界值测试用例的设计</h3> <p>例:计算1~100（含1和100）的两个整数的和。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110142757.png" alt="image-20210110142755861"></p> <p>分析输入数据</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110142725.png" alt="image-20210110142723253"></p> <p>测试用例</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110142825.png" alt="image-20210110142824140"></p> <ul><li>边界值测试用例实例</li></ul> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110142904.png" alt="image-20210110142903781"></p> <h3 id="_7-白盒测试的语句覆盖、分支覆盖、条件覆盖等"><a href="#_7-白盒测试的语句覆盖、分支覆盖、条件覆盖等" class="header-anchor">#</a> 7. 白盒测试的语句覆盖、分支覆盖、条件覆盖等</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110143136.png" alt="image-20210110143135348"></p> <h3 id="_8-软件调试的任务是什么-有哪两部分组成"><a href="#_8-软件调试的任务是什么-有哪两部分组成" class="header-anchor">#</a> 8. 软件调试的任务是什么？有哪两部分组成</h3> <blockquote><p>软件调试的任务</p> <p>在软件测试的基础上进一步<strong>纠正和确认</strong>相关错误或问题。</p></blockquote> <h3 id="_9-软件调试的方法"><a href="#_9-软件调试的方法" class="header-anchor">#</a> 9. 软件调试的方法</h3> <p>软件调试可采用4种方法：</p> <p>(1) 强行排错。主要技术和方法包括：</p> <ul><li>a) 内存排错。</li> <li>b) 特定语句排错。</li> <li>c) 自动调试工具。</li></ul> <p>(2) 回溯法排错</p> <p>(3) 归纳法排错</p> <p>(4) 演绎法排错。用演绎法排错4个步骤：</p> <ul><li><p>a) 列举假设。</p></li> <li><p>b) 排除不正确假设。</p></li> <li><p>c) 进一步排查定位。</p></li> <li><p>d)证明假设。</p></li></ul> <h3 id="_10-软件维护的概念和分类-完善、适应、纠错、预防"><a href="#_10-软件维护的概念和分类-完善、适应、纠错、预防" class="header-anchor">#</a> 10. 软件维护的概念和分类（完善、适应、纠错、预防）</h3> <blockquote><p>软件维护是指软件交付使用后，由于运行中存在的缺陷，或因业务需求及环境等变化，对软件进行微调的过程。目的是确保软件正常运行使用，提高用户满意度及服务信誉。</p></blockquote> <p>由上述原因产生的软件维护类型，主要包括4类：</p> <ul><li>a) 完善性维护。</li> <li>b) 适应性维护。</li> <li>c) 纠错性维护。</li> <li>d) 预防性维护。</li></ul> <h3 id="_11-软件测试分析文档"><a href="#_11-软件测试分析文档" class="header-anchor">#</a> 11. 软件测试分析文档</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110144233.png" alt="image-20210110144212146"></p> <h3 id="小结-7"><a href="#小结-7" class="header-anchor">#</a> 小结</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110144128.png" alt="image-20210110144127972"></p> <h2 id="第八章软件项目管理"><a href="#第八章软件项目管理" class="header-anchor">#</a> 第八章软件项目管理</h2> <h3 id="_1-项目管理的五个过程、十大知识领域-重要的几个领域的含义"><a href="#_1-项目管理的五个过程、十大知识领域-重要的几个领域的含义" class="header-anchor">#</a> 1. 项目管理的五个过程、十大知识领域，重要的几个领域的含义</h3> <p>题目：十大知识领域,重要的几个领域的含义</p> <p>答：</p> <p>范围管理：确保项目成功完成的所需的全部工作，主要关心的是确定与控制哪些应该做哪些不应该做。</p> <p>时间管理：为确保项目按时完成所要求的各项过程，制定项目开展的时间计划。</p> <p>成本管理：保证项目在已经批准的预算之内完成所必需的过程。主要关心项目活动所需资源的成本。</p> <p>质量管理：保证项目能满足原先规定的各项要求所需要的过程。</p> <p><strong>项目管理过程</strong>:启动过程，计划过程， 执行过程，控制和收尾过程。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110144625.png" alt="image-20210110144624679"></p> <p>(1) 项目范围管理：确保项目包括成功完成项目所需的全部工作，但有只包括成功完成项目所必须的工作过程。主要关心的是确定与控制哪些应该做哪些不应该做。</p> <p>(2) 项目时间管理：为确保项目按时完成所要求的各项过程，制定项目开展的时间计划。</p> <p>(3) 项目成本管理：保证项目在已经批准预算之内完成所必需的诸过程。主要关心项目活动所需资源的成本</p> <p>(4) 项目质量管理：保证项目能满足原先规定的各项要求所需要的过程。即“总体管理功能中决定质量方针、目标与责任的所有活动，并通过诸如质量规划、质量保证、质量控制、质量改进等手段在质量体系内机加一实施。”</p> <h3 id="_2-范围管理、成本-可行性分析部分讲过的投资收益比-和进度管理的内容"><a href="#_2-范围管理、成本-可行性分析部分讲过的投资收益比-和进度管理的内容" class="header-anchor">#</a> 2. 范围管理、成本（可行性分析部分讲过的投资收益比）和进度管理的内容</h3> <p>(1) 进度管理：进度管理估算、项目进度安排</p> <p>a) 范围管理：  软件项目有开发任务、管理和过程改进任务，每项任务应分解给相关的项目组，再由项目组分解落实到人.任务分解既有质和量要求，又有进度和费用方面的约束;既可按功能划分，也可按流程划分，分解方法和标准依据软件过程、项目特点、项目团队约束和项目经理经验而定。软件设计上的分层结构，通常成为任务分解结构WBS的依据.分解结果可用清单或/和图表形式表达。</p> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110144852.jpg" alt="img"></p> <h3 id="_3-进度估算的方法-定额估算法、经验公式法、cpm等"><a href="#_3-进度估算的方法-定额估算法、经验公式法、cpm等" class="header-anchor">#</a> 3. 进度估算的方法（定额估算法、经验公式法、CPM等）</h3> <blockquote><p>(1) 定额估算法。比较基本的估算项目历时的方法，公式为：T=Q/(R*S)</p> <p>[ T活动持续时间，可以用小时、日、周、月等表示。Q活动工作量，可以用人月、人天等单位表示。R人力或设备数量，可以用人或设备数表示。S开发效率，以单位时间完成的工作量表示。]</p> <p>(2) 经验公式法。根据大量项目数据统计而得出的模型，经验导出模型月进度为：D=a*Eb 。其中，D表示月进度，E表示人月工作量，a为2~4的参数，b为1/3左右的参数，它们时依赖于项目自然属性的参数。经验导出模型有几种具体公式（如CcCoMo模型为D=2.5Eb，b为0.32~0.28）</p> <p>(3) PERT与CPM。关键路径法CPM是一种网络图方法。利用网路顺序图的逻辑关系和加权历时估算来计算项目历时，每个活动历时采用加权平均的算法：（O+4M+P）/6。其中，O是活动（项目）完成的最小估算值，或者说是最乐观值；P是活动（项目）完成的最大估算值，或者说是最悲观值；M是活动（项目）完成的最大可能估算值。</p></blockquote> <h3 id="_4-进度管理的图形工具-甘特、网络、里程碑、资源等"><a href="#_4-进度管理的图形工具-甘特、网络、里程碑、资源等" class="header-anchor">#</a> 4. 进度管理的图形工具（甘特、网络、里程碑、资源等）</h3> <blockquote><p>(1) 甘特图（Gantt Chart）又称横道图，如图8-3所示，是活动进度与日历表的对照图。用水平线段表示活动的工作阶段，其中线段的长度表示完成任务所需时间，起点和终点分别表示任务的开始和结束时间。在甘特图中，任务的完成标准是交付相应文档和通过评审。甘特图表明项目的计划进度,并能动态反映当前开发进展状况,其缺点是不能表达出各任务之间复杂的逻辑关系。</p></blockquote> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110144958.jpg" alt="img"></p> <blockquote><p>(2) 网络图是用网络分析的方法编制的进度计划图。主要可以描述每个活动及其之间的逻辑关系。计划评审技术 PERT 和关键路径法 CPM 都采用网络图表示项目的活动。</p> <hr> <p>(3) 里程碑</p></blockquote> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110145016.jpg" alt="img"></p> <h3 id="_5-常用的网络图-单、双-、关键路径的分析、工期的估算"><a href="#_5-常用的网络图-单、双-、关键路径的分析、工期的估算" class="header-anchor">#</a> 5. 常用的网络图（单、双）、关键路径的分析、工期的估算</h3> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110145046.png" alt="image-20210110145046017"></p> <p>关键路径是决定项目完成的最短时间；是时间浮动为0（Float=0）的路径；网络图中最长的路径；关键路径上的任何活动延迟，都会导致整个项目完成时间的延迟</p> <h3 id="_6-质量管理、风险管理的概念"><a href="#_6-质量管理、风险管理的概念" class="header-anchor">#</a> 6. 质量管理、风险管理的概念</h3> <blockquote><p>(1) 软件质量是指与软件产品满足各种需求（包括隐含需求）的能力相关特征的总和。质量管理主要内容包括三个过程：质量计划制定、质量保证和质量控制。</p> <p>(2) 软件项目的风险管理是指对软件项目可能出现的风险，进行识别、评估、预防、监控的过程。</p></blockquote> <h3 id="_7-质量特性"><a href="#_7-质量特性" class="header-anchor">#</a> 7. 质量特性</h3> <p>质量特性包括：</p> <ol><li>功能性</li> <li>可靠性</li> <li>易使用性</li> <li>高效性</li> <li>可维护性</li> <li>可移植性</li></ol> <h3 id="_8-风险管理-识别、评估、预防、监控"><a href="#_8-风险管理-识别、评估、预防、监控" class="header-anchor">#</a> 8. 风险管理（识别、评估、预防、监控）</h3> <blockquote><p>(1) 风险识别是寻找可能影响项目的风险和确认风险特性的过程。</p> <p>(2) 风险估算也称为风险预测，主要从风险发生的可能性（概率）和风险发生所产生的后果两个方面评估风险。</p> <p>(3) 风险计划是设计如何进行风险管理活动的过程，实际是一个风险管理方案（预案）。包括界定项目组织及成员风险管理的行动方案，选择合适的风险管理方法，确定风险判断的依据。降低风险的主要策略是回避风险、转移风险、损失控制和承担风险。</p> <p>(4) 风险分析的目的是建立应对处理及监控风险的策略。</p></blockquote> <h3 id="_9-熟悉利用project进行任务分解、计算工期、分配资源、查看成本"><a href="#_9-熟悉利用project进行任务分解、计算工期、分配资源、查看成本" class="header-anchor">#</a> 9. 熟悉利用PROJECT进行任务分解、计算工期、分配资源、查看成本</h3> <h3 id="小结-8"><a href="#小结-8" class="header-anchor">#</a> 小结</h3> <h2 id="软件项目"><a href="#软件项目" class="header-anchor">#</a> 软件项目</h2> <p><img src="https://raw.githubusercontent.com/Gip886/picture/master/img/20210110145356.png" alt="image-20210110145355886"></p> <hr> <h2 id="题目总结"><a href="#题目总结" class="header-anchor">#</a> 题目总结</h2> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210112225100224.png" alt="image-20210112225100224"></p> <p>课本p148</p> <p>p40</p> <h2 id="押题"><a href="#押题" class="header-anchor">#</a> 押题</h2> <p><strong>1.敏捷软件开发过程模型的价值观</strong></p> <p>答：</p> <p>(1) 个体和交互胜过过程和工具</p> <p>(2) 可以工作的软件胜过面面俱到的文档</p> <p>(3) 客户合作胜过合同谈判</p> <p>(4) 响应变化胜过遵循计划</p> <p><strong>2.可行性分析的三个重要方面</strong></p> <ol><li>技术可行性分析</li> <li>经济可行性分析</li> <li>社会可行性分析</li></ol> <p><strong>3.结构化分析常用的工具有哪些？各有什么作用和特点</strong></p> <p>答：</p> <ol><li>ER图作为数据建模的基础，作用是清晰地表达目标系统中数据之间地联系及组织方式，实体模型由<strong>实体、联系和属性</strong>三个基本成分组成</li> <li>数据流图作为功能建模的基础，作用是描述系统内部的数据流程，表达各处理环节之间的数据联系</li> <li>状态转换图作为行为建模的基础，作用是描绘系统的状态及引起系统状态转换的事件,来表示系统的行为，分为：初始状态、终态、结束状态和中间状态。</li> <li>数据字典作为模型的核心，主要作用是和数据流图共同构成系统的逻辑模型，是数据描述的重要组成部分。数据字典有4类条目：数据流、数据项、文件及基本加工</li></ol> <p>简单版本：</p> <ol><li><p>实体-联系图ER图作为数据建模的基础，作用是描述数据对象实体及其关系，实体模型由<strong>实体、联系和属性</strong>三个基本成分组成</p></li> <li><p>数据流图作为功能建模的基础，作用是描述数据怎样转换以及转换功能</p></li> <li><p>状态转换图作为行为建模的基础，作用是表示系统的各种行为状态以及状态间的转换方式，分为：初始状态、终态、结束状态和中间状态。</p></li> <li><p>数据字典作为模型的核心，主要作用是存储数据定义和属性（描述说明）的文档，是数据描述的重要组成部分。数据字典有4类条目：数据流、数据项、文件及基本加工</p></li></ol> <p><strong>4.软件测试的步骤有哪些?每个步骤的主要内容和测试方法是什么</strong></p> <p>答：</p> <p>软件测试分为<strong>单元测试</strong>、<strong>集成测试</strong>、<strong>有效性（确认）测试</strong>和<strong>系统测试4个步骤</strong>，最后进行验收<strong>测试</strong>。</p> <ol><li>单元测试主要测试内容有：单元模块内和模块之间的功能测试，容错测试、边界测试、重要的执行路径测试，主要使用白盒测试技术。</li> <li>集成测试主要内容有：系统集成后的功能测试、业务流程测试、界面测试，主要测试方法一般采用的是白盒和黑盒结合的方法进行测试。</li> <li>有效性测试（确认测试）主要内容有：系统性的初始化测试、功能测试、性能测试，测试方法是黑盒测试的方法。</li> <li>系统测试测试主要内容有：恢复测试，安全测试，强度测试，性能测试，一般采取黑盒测试。</li></ol> <p><strong>5.十大知识领域,重要的几个领域的含义</strong></p> <p>答：</p> <p>范围管理：确保项目成功完成的所需的全部工作的过程，主要关心的是确定与控制哪些应该做哪些不应该做。</p> <p>时间管理：为确保项目按时完成所要求的各项过程，制定项目开展的时间计划。</p> <p>成本管理：保证项目在已经批准的预算之内完成所必需的过程。主要关心项目活动所需资源的成本。</p> <p>质量管理：保证项目能满足原先规定的各项要求所需要的过程。</p> <p><strong>6.对象模型的五个层次以及OOA的五项建模活动</strong></p> <p>答：</p> <p>对象模型常由五个层次组成：</p> <ol><li>类与对象层、</li> <li>属性层、</li> <li>服务层、</li> <li>结构层</li> <li>主题层，</li></ol> <p>其层次对应着OOA过程中建立对象模型的五项主要活动：</p> <ol><li>发现类和对象、</li> <li>定义属性、</li> <li>定义服务、</li> <li>划分结构、</li> <li>识别主题。</li></ol> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113003545837.png" alt="image-20210113003545837"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113004228283.png" alt="image-20210113004228283"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113004456854.png" alt="image-20210113004456854"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113004829537.png" alt="image-20210113004829537"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113004925672.png" alt="image-20210113004925672"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113005043070.png" alt="image-20210113005043070"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113005532703.png" alt="image-20210113005532703"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113005640255.png" alt="image-20210113005640255"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113005733324.png" alt="image-20210113005733324"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113005823292.png" alt="image-20210113005823292"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113005910693.png" alt="image-20210113005910693"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113005927093.png" alt="image-20210113005927093"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113010227813.png" alt="image-20210113010227813"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113010457133.png" alt="image-20210113010457133"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113010743507.png" alt="image-20210113010743507"></p> <p><img src="C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20210113011001140.png" alt="image-20210113011001140"></p></div> <footer class="page-edit"><!----> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev">
      ←
      <a href="/blog/views/JSP/01.html" class="prev">
        JSP复习
      </a></span> <span class="next"><a href="/blog/views/suanfa/01.html">
        算法复习总结
      </a>
      →
    </span></p></div> </main></div><div class="global-ui"></div></div>
    <script src="/blog/assets/js/app.ce46b86f.js" defer></script><script src="/blog/assets/js/2.262e1e49.js" defer></script><script src="/blog/assets/js/12.61fc7a48.js" defer></script>
  </body>
</html>
